如果其中有一个较小的 JScrollPane,如何滚动外部 JScrollPane?
How to scroll an outer JScrollPane if there is a smaller one in it?
问题:
有没有办法让 JTextArea 周围有一个 JScrollPane,它的行为就像没有 JScrollPane 一样,这样如果我的鼠标位于 JTextArea 上方,主要的外部 JPanel 及其滚动窗格就不会丢失 "focus"?
我有以下问题:
我将一些 JTextAreas 添加到滚动窗格,然后将其添加到一个大的 JScrollPane。
如果我现在想在大滚动窗格中滚动,当我位于其中一个文本区域的另一个滚动窗格上方时,什么也不会发生。
如何让系统总是滚动大的Scrollpane而忽略小的JtextAreas?
代码:
public class Artikelbehaelter extends javax.swing.JPanel {
public Artikelbehaelter(){
setBackground(new java.awt.Color(66, 66, 66));
setMaximumSize(new java.awt.Dimension(1320, 6300));
setMinimumSize(new java.awt.Dimension(1320, 6300));
setPreferredSize(new java.awt.Dimension(1320, 6300));
setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 0));
getAccessibleContext().setAccessibleName("JPanel");
}
}
}
public class Artikelpanel extends javax.swing.JPanel
{
public Artikelpanel(){
scrollbarTextArea.getViewport().setOpaque(false);
scrollbarTextArea.setOpaque(false);
scrollbarTextArea.setHorizontalScrollBarPolicy
(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollbarTextArea.setVerticalScrollBarPolicy
(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
scrollbarTextArea.setBorder(null);
textarea = new javax.swing.JTextArea();
textarea.setEditable(false);
textarea.setColumns(20);
textarea.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
textarea.setLineWrap(true);
textarea.setRows(5);
textarea.setText("Apple Iphone 11 Pro Max");
textarea.setWrapStyleWord(true);
textarea.setBorder(null);
textarea.setOpaque(false);
textarea.setForeground(fore);
textarea.setText(artikel.gesBezeichnungGeben().replaceAll("#"," "));
textarea.setFont(new java.awt.Font("Dialog", 1, 16));
scrollbarTextArea.setViewportView(name);
}}
public class Test extends JFrame(){
public Test(){
setLayout(null);
setVisible(true);
setSize(1600, 900);
getContentPane().setBackground(hellefarbe);
setTitle("LAGERVERWALTUNG");
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().
getResource("Desktop/JG Lagerverwaltung Icon.png")));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setMinimumSize(getSize());
setMaximumSize(getSize());
setResizable(false);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int n = (d.width - getSize().width) / 2;
int m = (d.height - getSize().height) / 2;
setLocation(n, m);
addMouseListener(this);
artikelbehaelter = new Artikelbehaelter()
scrollbar = new JScrollPane(artikelbehaelter)
scrollbar.setBounds(265 + 3, 50, 1320 - 3, 850);
scrollbar.setHorizontalScrollBarPolicy
(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollbar.getVerticalScrollBar().setUnitIncrement(16);
scrollbar.setBorder(new javax.swing.border.MatteBorder
(0, 0, 0, 0,Color.BLACK));
}}
我有办法。
只需将 MouseWheelListener 放在小的内部 JScrollPanes 上,如果检测到运动,则手动滚动主 JScrollPane:
private void MouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
int notch = evt.getWheelRotation();
int units = evt.getScrollAmount();
if (notch < 0){
units = units*(-1);}
JScrollBar bar = scrollbar[0].getVerticalScrollBar();
bar.setValue(bar.getValue()+units);
}
问题:
有没有办法让 JTextArea 周围有一个 JScrollPane,它的行为就像没有 JScrollPane 一样,这样如果我的鼠标位于 JTextArea 上方,主要的外部 JPanel 及其滚动窗格就不会丢失 "focus"?
我有以下问题:
我将一些 JTextAreas 添加到滚动窗格,然后将其添加到一个大的 JScrollPane。
如果我现在想在大滚动窗格中滚动,当我位于其中一个文本区域的另一个滚动窗格上方时,什么也不会发生。
如何让系统总是滚动大的Scrollpane而忽略小的JtextAreas?
代码:
public class Artikelbehaelter extends javax.swing.JPanel {
public Artikelbehaelter(){
setBackground(new java.awt.Color(66, 66, 66));
setMaximumSize(new java.awt.Dimension(1320, 6300));
setMinimumSize(new java.awt.Dimension(1320, 6300));
setPreferredSize(new java.awt.Dimension(1320, 6300));
setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 0));
getAccessibleContext().setAccessibleName("JPanel");
}
}
}
public class Artikelpanel extends javax.swing.JPanel
{
public Artikelpanel(){
scrollbarTextArea.getViewport().setOpaque(false);
scrollbarTextArea.setOpaque(false);
scrollbarTextArea.setHorizontalScrollBarPolicy
(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollbarTextArea.setVerticalScrollBarPolicy
(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
scrollbarTextArea.setBorder(null);
textarea = new javax.swing.JTextArea();
textarea.setEditable(false);
textarea.setColumns(20);
textarea.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
textarea.setLineWrap(true);
textarea.setRows(5);
textarea.setText("Apple Iphone 11 Pro Max");
textarea.setWrapStyleWord(true);
textarea.setBorder(null);
textarea.setOpaque(false);
textarea.setForeground(fore);
textarea.setText(artikel.gesBezeichnungGeben().replaceAll("#"," "));
textarea.setFont(new java.awt.Font("Dialog", 1, 16));
scrollbarTextArea.setViewportView(name);
}}
public class Test extends JFrame(){
public Test(){
setLayout(null);
setVisible(true);
setSize(1600, 900);
getContentPane().setBackground(hellefarbe);
setTitle("LAGERVERWALTUNG");
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().
getResource("Desktop/JG Lagerverwaltung Icon.png")));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setMinimumSize(getSize());
setMaximumSize(getSize());
setResizable(false);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int n = (d.width - getSize().width) / 2;
int m = (d.height - getSize().height) / 2;
setLocation(n, m);
addMouseListener(this);
artikelbehaelter = new Artikelbehaelter()
scrollbar = new JScrollPane(artikelbehaelter)
scrollbar.setBounds(265 + 3, 50, 1320 - 3, 850);
scrollbar.setHorizontalScrollBarPolicy
(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollbar.getVerticalScrollBar().setUnitIncrement(16);
scrollbar.setBorder(new javax.swing.border.MatteBorder
(0, 0, 0, 0,Color.BLACK));
}}
我有办法。 只需将 MouseWheelListener 放在小的内部 JScrollPanes 上,如果检测到运动,则手动滚动主 JScrollPane:
private void MouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
int notch = evt.getWheelRotation();
int units = evt.getScrollAmount();
if (notch < 0){
units = units*(-1);}
JScrollBar bar = scrollbar[0].getVerticalScrollBar();
bar.setValue(bar.getValue()+units);
}