Я нашел эту тему: Поместите JTable в JTree , и это не работает для меня. Как я могу «изменить» размер JTable в JTree, чтобы он соответствовал ширине? Внешняя JFrame имеет ширину 800 пикселей, как я могу сказать, что JTree использует это горизонтальное пространство, даже когда JFrame меняет свой размер? Так как я могу применить макет?
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeCellRenderer;
public class Main2 {
JRadioButton b1 = new JRadioButton("One");
JRadioButton b2 = new JRadioButton("Two");
ButtonGroup bg1 = new ButtonGroup();
DefaultMutableTreeNode root = new DefaultMutableTreeNode(new Mail("a.b@c", "d.e@f", "s", "01"));
DefaultTreeModel dtm = new DefaultTreeModel(root);
JTree tt = new JTree(dtm);
class Mail {
String f, t, s, d;
Mail(String f, String t, String s, String d) {
this.f = f;
this.t = t;
this.s = s;
this.d = d;
}
}
class MyTableInTreeCellRenderer implements TreeCellRenderer {
private JTable t = new JTable();
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
Mail v = (Mail) ((DefaultMutableTreeNode) value).getUserObject();
t.setModel(new DefaultTableModel(new Object[][] { { v.f, v.t, v.s, v.d } },
new Object[] { "f", "t", "s", "d" }));
t.setTableHeader(null);
t.setPreferredSize(new Dimension(750, 20)); // How to set Layout with effect?
return t;
}
}
public Main2() {
b1.setSelected(true);
bg1.add(b1);
bg1.add(b2);
root.add(new DefaultMutableTreeNode(new Mail("a.b@c", "d.e@f", "s", "02")));
root.add(new DefaultMutableTreeNode(new Mail("a.b@c", "d.e@f", "s", "03")));
tt.setCellRenderer(new MyTableInTreeCellRenderer());
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(2, 1));
p1.add(b1);
p1.add(b2);
JFrame jf = new JFrame();
jf.setLayout(new BorderLayout());
jf.add(p1, BorderLayout.NORTH);
jf.add(new JScrollPane(tt), BorderLayout.CENTER);
jf.setSize(800, 400);
jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jf.setVisible(true);
}
public static void main(String[] args) {
new Main2();
}
}