Guest
Wie man verhindern, dass innere Jscrollpane Maus -Scroll -Radbewegungen konsumiert
Post
by Guest » 16 Feb 2025, 07:56
Ich baue einen jpanel zusammen, der aus mehreren JTables besteht. Jedes jTable hat über einen umschließenden JScrollPane , sodass die Headerwerte angezeigt werden. Der gesamte jpanel hat eine einschließende jScrollpane . erscheinen. Wenn ich versuche, mit dem Maus -Scroll -Rad zu scrollen, muss ich sicherstellen, dass sich mein Mauszeiger außerhalb der jTable Bereiche befindet. Es scheint, dass die inneren jScrollpanes die Maus -Scroll -Radbewegungen verbrauchen.
Code: Select all
scrollPane.setWheelScrollingEnabled(false);
Auf den inneren jScrollpanes , aber das war nicht ausreichend. Konsumieren der Maus -Scroll -Radbewegungen?
Code: Select all
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
public class MultipleJTableExample implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new MultipleJTableExample());
}
@Override
public void run() {
JFrame frame = new JFrame("Multiple JTable Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createTablePanel(), BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createTablePanel() {
JPanel outerPanel = new JPanel(new BorderLayout());
JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.LINE_START;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(0, 0, 20, 0);
gbc.gridx = 0;
gbc.gridy = 0;
Map animalMap = new AnimalModel()
.getAnimalMap();
Set mapSet = animalMap.keySet();
Iterator iterator = mapSet.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
List animalValues = animalMap.get(key);
panel.add(createSubtablePanel(key, animalValues), gbc);
gbc.gridy++;
}
Dimension d = panel.getPreferredSize();
int height = d.height / 2;
int width = d.width + 30;
JScrollPane scrollPane = new JScrollPane(panel);
JScrollBar scrollBar = scrollPane.getVerticalScrollBar();
scrollBar.setMinimum(0);
scrollBar.setMaximum(d.height);
scrollBar.setBlockIncrement(32);
scrollBar.setUnitIncrement(32);
scrollPane.setPreferredSize(new Dimension(width, height));
outerPanel.add(scrollPane, BorderLayout.CENTER);
return outerPanel;
}
private JPanel createSubtablePanel(String key,
List animalValues) {
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
JLabel label = new JLabel(key);
label.setFont(panel.getFont().deriveFont(Font.BOLD, 20f));
panel.add(label, BorderLayout.NORTH);
AVTableModel tableModel = new AVTableModel();
tableModel.addColumns();
tableModel.addRows(animalValues);
JTable table = new JTable(tableModel);
table.setAutoCreateRowSorter(true);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(0).setPreferredWidth(150);
columnModel.getColumn(1).setPreferredWidth(60);
columnModel.getColumn(2).setPreferredWidth(100);
columnModel.getColumn(3).setPreferredWidth(60);
columnModel.getColumn(4).setPreferredWidth(100);
columnModel.getColumn(5).setPreferredWidth(100);
Dimension d = table.getPreferredSize();
d.width = 570;
table.setPreferredSize(d);
table.setPreferredScrollableViewportSize(
new Dimension(d.width, d.height));
columnModel.getColumn(1).setCellRenderer(new CenterRenderer());
columnModel.getColumn(2).setCellRenderer(new CenterRenderer());
columnModel.getColumn(3).setCellRenderer(new PercentRenderer());
columnModel.getColumn(4).setCellRenderer(new MoneyRenderer("%,d"));
columnModel.getColumn(5).setCellRenderer(new MoneyRenderer("%,d"));
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setWheelScrollingEnabled(false);
panel.add(scrollPane, BorderLayout.CENTER);
return panel;
}
public class CenterRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
label.setHorizontalAlignment(JLabel.CENTER);
return label;
}
}
public class MoneyRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
private final String formatter;
public MoneyRenderer(String formatter) {
this.formatter = formatter;
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
String s = "";
if (value instanceof Double) {
s = String.format(formatter, (double) value);
} else {
s = String.format(formatter, (int) value);
}
label.setText("$" + s + " ");
label.setHorizontalAlignment(JLabel.TRAILING);
return label;
}
}
public class PercentRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
label.setText(value.toString() + "%");
label.setHorizontalAlignment(JLabel.CENTER);
return label;
}
}
public class AVTableModel extends DefaultTableModel {
private static final long serialVersionUID = 1L;
public AVTableModel() {
super();
}
public void addColumns() {
addColumn("Subtype");
addColumn("Count");
addColumn("Age in months");
addColumn("Health");
addColumn("Current value");
addColumn("Total value");
}
public void addRows(List animalValues) {
for (AnimalValue animalValue : animalValues) {
Object[] rowData = new Object[this.getColumnCount()];
rowData[0] = animalValue.getSubType();
int count = animalValue.getCount();
rowData[1] = count;
rowData[2] = animalValue.getAge();
rowData[3] = animalValue.getHealth();
int value = animalValue.getValue();
rowData[4] = value / count;
rowData[5] = value;
addRow(rowData);
}
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
@Override
public Class getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
default:
return Integer.class;
}
}
}
public class AnimalModel {
private Map animalMap;
public AnimalModel() {
this.animalMap = new HashMap();
List animalValues = new ArrayList();
animalValues.add(new AnimalValue(20, 12, 100, "chicken"));
animalValues.add(new AnimalValue(20, 11, 100, "chicken"));
animalValues.add(new AnimalValue(20, 10, 100, "chicken"));
animalValues.add(new AnimalValue(20, 9, 100, "chicken"));
animalValues.add(new AnimalValue(20, 8, 100, "chicken"));
animalValues.add(new AnimalValue(20, 7, 100, "chicken"));
animalValues.add(new AnimalValue(20, 6, 100, "chicken"));
animalValues.add(new AnimalValue(20, 5, 100, "chicken"));
animalValues.add(new AnimalValue(20, 4, 100, "chicken"));
animalValues.add(new AnimalValue(20, 3, 100, "chicken"));
animalMap.put("Chicken coop 1", animalValues);
animalValues = new ArrayList();
animalValues.add(new AnimalValue(20, 12, 100, "chicken"));
animalValues.add(new AnimalValue(20, 11, 100, "chicken"));
animalValues.add(new AnimalValue(20, 10, 100, "chicken"));
animalValues.add(new AnimalValue(20, 9, 100, "chicken"));
animalValues.add(new AnimalValue(20, 8, 100, "chicken"));
animalValues.add(new AnimalValue(20, 7, 100, "chicken"));
animalValues.add(new AnimalValue(20, 6, 100, "chicken"));
animalValues.add(new AnimalValue(20, 5, 100, "chicken"));
animalValues.add(new AnimalValue(20, 4, 100, "chicken"));
animalValues.add(new AnimalValue(20, 3, 100, "chicken"));
animalMap.put("Chicken coop 2", animalValues);
animalValues = new ArrayList();
animalValues.add(new AnimalValue(20, 12, 100, "cow"));
animalValues.add(new AnimalValue(20, 11, 100, "cow"));
animalValues.add(new AnimalValue(20, 10, 100, "cow"));
animalValues.add(new AnimalValue(20, 9, 100, "cow"));
animalValues.add(new AnimalValue(20, 8, 100, "cow"));
animalValues.add(new AnimalValue(20, 7, 100, "cow"));
animalValues.add(new AnimalValue(20, 6, 100, "cow"));
animalValues.add(new AnimalValue(20, 5, 100, "cow"));
animalValues.add(new AnimalValue(20, 4, 100, "cow"));
animalValues.add(new AnimalValue(20, 3, 100, "cow"));
animalMap.put("Cow barn", animalValues);
}
public Map getAnimalMap() {
return animalMap;
}
}
public class AnimalValue {
private final int age, count, health;
private final String subType, type;
public AnimalValue(int count, int age, int health, String subType) {
this.count = count;
this.age = age;
this.health = health;
this.type = formatType(subType);
this.subType = formatSubType(subType);
}
private String formatType(String type) {
String output = type.toLowerCase();
int pos = output.lastIndexOf("_");
if (pos >= 0) {
output = output.substring(0, pos);
}
return output;
}
private String formatSubType(String subType) {
String output = subType.toLowerCase();
int pos = output.lastIndexOf("_");
if (pos >= 0) {
output = output.substring(pos + 1);
}
char u = Character.toUpperCase(output.charAt(0));
return "" + u + output.substring(1);
}
public int getValue() {
switch (type) {
case "chicken":
if (subType.equals("Chicken")) {
return calculateValue(count, age, 6, health, 5, 25);
} else {
return calculateValue(count, age, 6, health, 5, 20);
}
case "cow":
return calculateValue(count, age, 18, health, 150, 1500);
default:
return 0;
}
}
private int calculateValue(int count, int age, int maturity, int health,
int minValue, int maxValue) {
int maxAge = Math.min(maturity, age);
return (int) (((double) maxAge * (maxValue - minValue) / maturity
+ minValue) * health / 100.0 * count);
}
public int getAge() {
return age;
}
public int getCount() {
return count;
}
public int getHealth() {
return health;
}
public String getSubType() {
return subType;
}
}
}
1739688996
Guest
Ich baue einen jpanel zusammen, der aus mehreren JTables besteht. Jedes jTable hat über einen umschließenden JScrollPane , sodass die Headerwerte angezeigt werden. Der gesamte jpanel hat eine einschließende jScrollpane . erscheinen. Wenn ich versuche, mit dem Maus -Scroll -Rad zu scrollen, muss ich sicherstellen, dass sich mein Mauszeiger außerhalb der jTable Bereiche befindet. Es scheint, dass die inneren jScrollpanes die Maus -Scroll -Radbewegungen verbrauchen.[code]scrollPane.setWheelScrollingEnabled(false); [/code] Auf den inneren jScrollpanes , aber das war nicht ausreichend. Konsumieren der Maus -Scroll -Radbewegungen?[code]import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumnModel; public class MultipleJTableExample implements Runnable { public static void main(String[] args) { SwingUtilities.invokeLater(new MultipleJTableExample()); } @Override public void run() { JFrame frame = new JFrame("Multiple JTable Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(createTablePanel(), BorderLayout.CENTER); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } private JPanel createTablePanel() { JPanel outerPanel = new JPanel(new BorderLayout()); JPanel panel = new JPanel(new GridBagLayout()); panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.LINE_START; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets(0, 0, 20, 0); gbc.gridx = 0; gbc.gridy = 0; Map animalMap = new AnimalModel() .getAnimalMap(); Set mapSet = animalMap.keySet(); Iterator iterator = mapSet.iterator(); while (iterator.hasNext()) { String key = iterator.next(); List animalValues = animalMap.get(key); panel.add(createSubtablePanel(key, animalValues), gbc); gbc.gridy++; } Dimension d = panel.getPreferredSize(); int height = d.height / 2; int width = d.width + 30; JScrollPane scrollPane = new JScrollPane(panel); JScrollBar scrollBar = scrollPane.getVerticalScrollBar(); scrollBar.setMinimum(0); scrollBar.setMaximum(d.height); scrollBar.setBlockIncrement(32); scrollBar.setUnitIncrement(32); scrollPane.setPreferredSize(new Dimension(width, height)); outerPanel.add(scrollPane, BorderLayout.CENTER); return outerPanel; } private JPanel createSubtablePanel(String key, List animalValues) { JPanel panel = new JPanel(new BorderLayout()); panel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5)); JLabel label = new JLabel(key); label.setFont(panel.getFont().deriveFont(Font.BOLD, 20f)); panel.add(label, BorderLayout.NORTH); AVTableModel tableModel = new AVTableModel(); tableModel.addColumns(); tableModel.addRows(animalValues); JTable table = new JTable(tableModel); table.setAutoCreateRowSorter(true); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); TableColumnModel columnModel = table.getColumnModel(); columnModel.getColumn(0).setPreferredWidth(150); columnModel.getColumn(1).setPreferredWidth(60); columnModel.getColumn(2).setPreferredWidth(100); columnModel.getColumn(3).setPreferredWidth(60); columnModel.getColumn(4).setPreferredWidth(100); columnModel.getColumn(5).setPreferredWidth(100); Dimension d = table.getPreferredSize(); d.width = 570; table.setPreferredSize(d); table.setPreferredScrollableViewportSize( new Dimension(d.width, d.height)); columnModel.getColumn(1).setCellRenderer(new CenterRenderer()); columnModel.getColumn(2).setCellRenderer(new CenterRenderer()); columnModel.getColumn(3).setCellRenderer(new PercentRenderer()); columnModel.getColumn(4).setCellRenderer(new MoneyRenderer("%,d")); columnModel.getColumn(5).setCellRenderer(new MoneyRenderer("%,d")); JScrollPane scrollPane = new JScrollPane(table); scrollPane.setWheelScrollingEnabled(false); panel.add(scrollPane, BorderLayout.CENTER); return panel; } public class CenterRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); label.setHorizontalAlignment(JLabel.CENTER); return label; } } public class MoneyRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; private final String formatter; public MoneyRenderer(String formatter) { this.formatter = formatter; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); String s = ""; if (value instanceof Double) { s = String.format(formatter, (double) value); } else { s = String.format(formatter, (int) value); } label.setText("$" + s + " "); label.setHorizontalAlignment(JLabel.TRAILING); return label; } } public class PercentRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); label.setText(value.toString() + "%"); label.setHorizontalAlignment(JLabel.CENTER); return label; } } public class AVTableModel extends DefaultTableModel { private static final long serialVersionUID = 1L; public AVTableModel() { super(); } public void addColumns() { addColumn("Subtype"); addColumn("Count"); addColumn("Age in months"); addColumn("Health"); addColumn("Current value"); addColumn("Total value"); } public void addRows(List animalValues) { for (AnimalValue animalValue : animalValues) { Object[] rowData = new Object[this.getColumnCount()]; rowData[0] = animalValue.getSubType(); int count = animalValue.getCount(); rowData[1] = count; rowData[2] = animalValue.getAge(); rowData[3] = animalValue.getHealth(); int value = animalValue.getValue(); rowData[4] = value / count; rowData[5] = value; addRow(rowData); } } @Override public boolean isCellEditable(int row, int column) { return false; } @Override public Class getColumnClass(int columnIndex) { switch (columnIndex) { case 0: return String.class; default: return Integer.class; } } } public class AnimalModel { private Map animalMap; public AnimalModel() { this.animalMap = new HashMap(); List animalValues = new ArrayList(); animalValues.add(new AnimalValue(20, 12, 100, "chicken")); animalValues.add(new AnimalValue(20, 11, 100, "chicken")); animalValues.add(new AnimalValue(20, 10, 100, "chicken")); animalValues.add(new AnimalValue(20, 9, 100, "chicken")); animalValues.add(new AnimalValue(20, 8, 100, "chicken")); animalValues.add(new AnimalValue(20, 7, 100, "chicken")); animalValues.add(new AnimalValue(20, 6, 100, "chicken")); animalValues.add(new AnimalValue(20, 5, 100, "chicken")); animalValues.add(new AnimalValue(20, 4, 100, "chicken")); animalValues.add(new AnimalValue(20, 3, 100, "chicken")); animalMap.put("Chicken coop 1", animalValues); animalValues = new ArrayList(); animalValues.add(new AnimalValue(20, 12, 100, "chicken")); animalValues.add(new AnimalValue(20, 11, 100, "chicken")); animalValues.add(new AnimalValue(20, 10, 100, "chicken")); animalValues.add(new AnimalValue(20, 9, 100, "chicken")); animalValues.add(new AnimalValue(20, 8, 100, "chicken")); animalValues.add(new AnimalValue(20, 7, 100, "chicken")); animalValues.add(new AnimalValue(20, 6, 100, "chicken")); animalValues.add(new AnimalValue(20, 5, 100, "chicken")); animalValues.add(new AnimalValue(20, 4, 100, "chicken")); animalValues.add(new AnimalValue(20, 3, 100, "chicken")); animalMap.put("Chicken coop 2", animalValues); animalValues = new ArrayList(); animalValues.add(new AnimalValue(20, 12, 100, "cow")); animalValues.add(new AnimalValue(20, 11, 100, "cow")); animalValues.add(new AnimalValue(20, 10, 100, "cow")); animalValues.add(new AnimalValue(20, 9, 100, "cow")); animalValues.add(new AnimalValue(20, 8, 100, "cow")); animalValues.add(new AnimalValue(20, 7, 100, "cow")); animalValues.add(new AnimalValue(20, 6, 100, "cow")); animalValues.add(new AnimalValue(20, 5, 100, "cow")); animalValues.add(new AnimalValue(20, 4, 100, "cow")); animalValues.add(new AnimalValue(20, 3, 100, "cow")); animalMap.put("Cow barn", animalValues); } public Map getAnimalMap() { return animalMap; } } public class AnimalValue { private final int age, count, health; private final String subType, type; public AnimalValue(int count, int age, int health, String subType) { this.count = count; this.age = age; this.health = health; this.type = formatType(subType); this.subType = formatSubType(subType); } private String formatType(String type) { String output = type.toLowerCase(); int pos = output.lastIndexOf("_"); if (pos >= 0) { output = output.substring(0, pos); } return output; } private String formatSubType(String subType) { String output = subType.toLowerCase(); int pos = output.lastIndexOf("_"); if (pos >= 0) { output = output.substring(pos + 1); } char u = Character.toUpperCase(output.charAt(0)); return "" + u + output.substring(1); } public int getValue() { switch (type) { case "chicken": if (subType.equals("Chicken")) { return calculateValue(count, age, 6, health, 5, 25); } else { return calculateValue(count, age, 6, health, 5, 20); } case "cow": return calculateValue(count, age, 18, health, 150, 1500); default: return 0; } } private int calculateValue(int count, int age, int maturity, int health, int minValue, int maxValue) { int maxAge = Math.min(maturity, age); return (int) (((double) maxAge * (maxValue - minValue) / maturity + minValue) * health / 100.0 * count); } public int getAge() { return age; } public int getCount() { return count; } public int getHealth() { return health; } public String getSubType() { return subType; } } } [/code]