调整 JTable 大小
Resize JTable size
我有一个 JTable
,用户数据分布在 rows
和 columns
中。我想什么时候,我在JTextField
,resize the size(height
,with same width) 取决于找到的 rows
的数量。 为什么 table 的宽度变小了?
代码:
tabla_clientes.setPreferredScrollableViewportSize(
new Dimension(tabla_clientes.getPreferredSize().width, tabla_clientes.getRowHeight()*20)
);
//...
private void resizer() {
revalidate();
int w = jScrollPane.getPreferredSize().width; //width scroll pane
int h1 = jScrollPane.getViewport().getViewSize().height; //height viewport
int h2 = tabla_clientes.getPreferredScrollableViewportSize().height; //table height
if(h1<h2)
jScrollPane.setSize(new Dimension(w,h1));
else
jScrollPane.setSize(tabla_clientes.getPreferredScrollableViewportSize());
}
public void filtrar_dni() {
int columna = 0;
TRSFiltro.setRowFilter(RowFilter.regexFilter(textfield_buscar.getText(), columna));
}
private void textfield_buscarKeyTyped(java.awt.event.KeyEvent evt) {
textfield_buscar.addKeyListener(new KeyAdapter(){
public void keyReleased(final KeyEvent e){
String texto = (textfield_buscar.getText());
textfield_buscar.setText(texto);
filtrar_dni();
resizer();
}
});
TRSFiltro = new TableRowSorter<DefaultTableModel>((DefaultTableModel) tabla_clientes.getModel());
tabla_clientes.setRowSorter(TRSFiltro);
}
意外结果:
原文table:
您应该使用布局管理器:https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
这使得组件的定位更加容易。一个易于理解的示例可能是:
import javax.swing.*;
import java.awt.*;
public class Test {
public static void main(String[] args) {
JLabel bigLabel = new JLabel("VERY BIG");
bigLabel.setPreferredSize(new Dimension(100, 1000));
JPanel north = new JPanel();
north.setLayout(new FlowLayout());
north.add(new JLabel("NORTH CONTENT"));
JScrollPane p = new JScrollPane();
p.setViewportView(bigLabel);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setPreferredSize(new Dimension(200, 300));
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(north, BorderLayout.NORTH);
f.getContentPane().add(p, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
我不会向您展示没有布局管理器的版本,因为 1) 我什至不确定是否能够正确编写它,以及 2) 无论如何您都不应该这样做,除非您有非常 很好的理由(例如,没有满足您需要的布局管理器 - 顺便说一句,非常罕见)。
我有一个 JTable
,用户数据分布在 rows
和 columns
中。我想什么时候,我在JTextField
,resize the size(height
,with same width) 取决于找到的 rows
的数量。 为什么 table 的宽度变小了?
代码:
tabla_clientes.setPreferredScrollableViewportSize(
new Dimension(tabla_clientes.getPreferredSize().width, tabla_clientes.getRowHeight()*20)
);
//...
private void resizer() {
revalidate();
int w = jScrollPane.getPreferredSize().width; //width scroll pane
int h1 = jScrollPane.getViewport().getViewSize().height; //height viewport
int h2 = tabla_clientes.getPreferredScrollableViewportSize().height; //table height
if(h1<h2)
jScrollPane.setSize(new Dimension(w,h1));
else
jScrollPane.setSize(tabla_clientes.getPreferredScrollableViewportSize());
}
public void filtrar_dni() {
int columna = 0;
TRSFiltro.setRowFilter(RowFilter.regexFilter(textfield_buscar.getText(), columna));
}
private void textfield_buscarKeyTyped(java.awt.event.KeyEvent evt) {
textfield_buscar.addKeyListener(new KeyAdapter(){
public void keyReleased(final KeyEvent e){
String texto = (textfield_buscar.getText());
textfield_buscar.setText(texto);
filtrar_dni();
resizer();
}
});
TRSFiltro = new TableRowSorter<DefaultTableModel>((DefaultTableModel) tabla_clientes.getModel());
tabla_clientes.setRowSorter(TRSFiltro);
}
意外结果:
原文table:
您应该使用布局管理器:https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html 这使得组件的定位更加容易。一个易于理解的示例可能是:
import javax.swing.*;
import java.awt.*;
public class Test {
public static void main(String[] args) {
JLabel bigLabel = new JLabel("VERY BIG");
bigLabel.setPreferredSize(new Dimension(100, 1000));
JPanel north = new JPanel();
north.setLayout(new FlowLayout());
north.add(new JLabel("NORTH CONTENT"));
JScrollPane p = new JScrollPane();
p.setViewportView(bigLabel);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setPreferredSize(new Dimension(200, 300));
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(north, BorderLayout.NORTH);
f.getContentPane().add(p, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
我不会向您展示没有布局管理器的版本,因为 1) 我什至不确定是否能够正确编写它,以及 2) 无论如何您都不应该这样做,除非您有非常 很好的理由(例如,没有满足您需要的布局管理器 - 顺便说一句,非常罕见)。