Java 试图获得一个JTable+;要滚动的JScrollPane
我已经完成了谷歌搜索,并尝试实现了一些关于JTable和JScrollPane的不同解决方案。下面是我遇到的问题的一个独立示例。我想能够有一个水平滚动条与这些表。非常感谢您的帮助:Java 试图获得一个JTable+;要滚动的JScrollPane,java,swing,jtable,jscrollpane,Java,Swing,Jtable,Jscrollpane,我已经完成了谷歌搜索,并尝试实现了一些关于JTable和JScrollPane的不同解决方案。下面是我遇到的问题的一个独立示例。我想能够有一个水平滚动条与这些表。非常感谢您的帮助: package org.examples; import java.awt.EventQueue; import java.awt.Frame; import java.awt.Rectangle; import java.util.ArrayList; import java.util.List; import
package org.examples;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;
public class TableTest extends JFrame {
private JTable tableTest_1;
private ArrayListStringTableModel tableTestModel_1;
private JTable tableTest_2;
private ArrayListStringTableModel tableTestModel_2;
private JScrollPane tableTestScrollPane_1;
private JScrollPane tableTestScrollPane_2;
private class ArrayListStringTableModel extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = 3071398398073956893L;
private List <String> listOfStrings;
private String[] columnNames = {""};
public ArrayListStringTableModel (String[] lColumnNames) {
columnNames = lColumnNames;
listOfStrings = new ArrayList<String>();
}
public void addString (String lString) {
String localString = lString;
listOfStrings.add(localString);
}
public int getColumnCount () {
return columnNames.length;
}
public int getRowCount () {
return listOfStrings.size();
}
public String getColumnName (int col) {
return columnNames[col];
}
public Object getValueAt (int row, int column) {
Object returnObject = null;
String localString = listOfStrings.get(row);
switch (column) {
case 0 :
returnObject = (Object)localString;
break;
}
return returnObject;
}
}
/**
* Initialize the contents of the frame.
*/
public TableTest() {
String[] rows = {"Damage Resistance (only vs. Head Shots) Physical Damage Reduction, Resistant, 75% ; Only Works Against Head Shots Rare attack , Only Amyklai can use Energy Damage Reduction, Resistant, 75% ; Only Works Against Head Shots Rare attack , Only Amyklai can use",
"Mental Defense (10 points total),Only Amyklai can use",
"Sight Group Flash Defense (5 points),Only Amyklai can use",
"Resistant Protection (10 PD/10 ED),STR Min 18 , Costs Half Endurance",
"Banded Mail Resistant Protection (8 PD/8 ED)"
};
String[] columns = {"Damage"};
tableTestModel_1 = new ArrayListStringTableModel(columns);
tableTestModel_2 = new ArrayListStringTableModel(columns);
// Set up the main window frame
setTitle("Table Test");
setSize(435, 375);
getContentPane().setLayout(null);
for (int i=0; i <= 4; i++) {
tableTestModel_1.addString(rows[i]);
tableTestModel_2.addString(rows[i]);
}
tableTest_1 = new JTable(tableTestModel_1);
tableTest_1.setBounds(new Rectangle(10, 10, 395, 250));
tableTest_1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tableTestScrollPane_1 = new JScrollPane(tableTest_1);
tableTestScrollPane_1.setBounds(10, 10, 405, 80);
tableTestScrollPane_1.setColumnHeaderView(tableTest_1);
tableTest_2 = new JTable(tableTestModel_2);
tableTest_2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableTest_2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tableTestScrollPane_2 = new JScrollPane(tableTest_2);
tableTestScrollPane_2.setBounds(10, 100, 200, 80);
JViewport viewport = new JViewport();
viewport.setView(tableTest_2);
viewport.setPreferredSize(tableTest_2.getPreferredSize());
tableTestScrollPane_2.setRowHeaderView(viewport);
tableTestScrollPane_2.setCorner(JScrollPane.UPPER_LEFT_CORNER, tableTest_2.getTableHeader());
getContentPane().add(tableTestScrollPane_1);
getContentPane().add(tableTestScrollPane_2);
}
/**
* @param args
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TableTest testtableWindow = new TableTest();
testtableWindow.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
package org.examples;
导入java.awt.EventQueue;
导入java.awt.Frame;
导入java.awt.Rectangle;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.JViewport;
导入javax.swing.ListSelectionModel;
导入javax.swing.table.AbstractTableModel;
公共类TableTest扩展了JFrame{
专用JTable tableTest_1;
私有ArrayListStringTableModel tableTestModel_1;
专用JTable tableTest_2;
私有ArrayListStringTableModel TableTestModel2;
私有JScrollPane表TestScrollPane_1;
私有JScrollPane表TestScrollPane_2;
私有类ArrayListStringTableModel扩展了AbstractTableModel{
/**
*
*/
私有静态最终长serialVersionUID=3071398398073956893L;
私有列表;
私有字符串[]columnNames={”“};
公共ArrayListStringTableModel(字符串[]lColumnNames){
columnNames=lColumnNames;
listofstring=newarraylist();
}
公共void addString(String lString){
字符串localString=lString;
添加(localString);
}
public int getColumnCount(){
返回columnNames.length;
}
public int getRowCount(){
返回listOfStrings.size();
}
公共字符串getColumnName(int-col){
返回列名[col];
}
公共对象getValueAt(int行,int列){
objectreturnobject=null;
String localString=listOfStrings.get(行);
开关(列){
案例0:
returnObject=(Object)localString;
打破
}
返回对象;
}
}
/**
*初始化框架的内容。
*/
公共表格测试(){
String[]rows={“伤害抗性(仅对头部射击)物理伤害降低,抗性,75%;仅对头部射击罕见攻击有效,只有阿梅科莱可以使用能量伤害降低,抗性,75%;仅对头部射击罕见攻击有效,只有阿梅科莱可以使用”,
“精神防御(总共10分),只有阿梅克莱可以使用”,
“视线群闪避防御(5分),只有阿梅科莱可以使用”,
“电阻保护(10 PD/10 ED),最小强度为18,消耗一半耐力”,
“带状邮件防护(8 PD/8 ED)”
};
字符串[]列={“损坏”};
tableTestModel_1=新的ArrayListStringTableModel(列);
tableTestModel_2=新的ArrayListStringTableModel(列);
//设置主窗口框架
setTitle(“表格测试”);
设置大小(435375);
getContentPane().setLayout(null);
对于(int i=0;i这是将表格移动到滚动窗格列标题位置,该位置没有滚动条…将其删除
tableTestScrollPane_1.setColumnHeaderView(tableTest_1);
这实际上是从滚动窗格中删除tableTest_2
,将其放置在新的视图端口中,并将其添加到没有滚动条的行标题中
viewport.setView(tableTest_2);
...
tableTestScrollPane_2.setRowHeaderView(viewport);
组件只能属于单个父级
试着做一些类似的事情
tableTest_1 = new JTable(tableTestModel_1);
tableTest_1.setBounds(new Rectangle(10, 10, 395, 100));
tableTest_1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tableTestScrollPane_1 = new JScrollPane(tableTest_1);
tableTest_2 = new JTable(tableTestModel_2);
tableTest_2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableTest_2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tableTestScrollPane_2 = new JScrollPane(tableTest_2);
getContentPane().add(tableTestScrollPane_1);
getContentPane().add(tableTestScrollPane_2);
这是您的第一个问题。getContentPane().setLayout(null);
这将导致您需要一些问题。。。