Wie man verhindern, dass innere Jscrollpane Maus -Scroll -Radbewegungen konsumiertJava

Java-Forum
Guest
 Wie man verhindern, dass innere Jscrollpane Maus -Scroll -Radbewegungen konsumiert

Post by 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: 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;
}

}

}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post