Java 无法对同一类的对象使用方法
我正在实现一个Java 无法对同一类的对象使用方法,java,object,Java,Object,我正在实现一个JFrame类,该类必须查看一个表并对其进行处理。这个表有一个AbstractTableModel,我在上面定义了一个方法,我想在JFrame类中使用它。但我不能这么做。 代码如下: 必须查看JTable的JFrame类 public class CreaOrario extends JFrame { public CreaOrario(int num) { initialize(num); } /** * Initialize the contents of th
JFrame
类,该类必须查看一个表并对其进行处理。这个表有一个AbstractTableModel
,我在上面定义了一个方法,我想在JFrame
类中使用它。但我不能这么做。
代码如下:
必须查看JTable的JFrame类
public class CreaOrario extends JFrame {
public CreaOrario(int num) {
initialize(num);
}
/**
* Initialize the contents of the frame.
*/
private void initialize(final int semestre) {
this.setSize(1150,650);
this.setTitle("Creazione dell'Orario");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TabellaOrario orarioEditabile = new TabellaOrario(semestre);
this.getContentPane().add(orarioEditabile, BorderLayout.CENTER);
final JTable table = orarioEditabile.getTable();
//now I'd like to do: table.getLesson;
}
}
必须添加到JFrame中并包含以下表的JPanel类:
public class TabellaOrario extends JPanel
{
private JTable table;
public TabellaOrario (int semestre)
{
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
table = new JTable(new MyTableModel());
table.setFillsViewportHeight(true);
table.setPreferredScrollableViewportSize(new Dimension(510, 350));
JScrollPane jps = new JScrollPane(table);
add(jps);
add(new JScrollPane(table));
table.setCellSelectionEnabled(true);
table.setRowHeight(40);
}
public JTable getTable() {
return table;
}
public class MyTableModel extends AbstractTableModel
{
private String[] columns = {"","Lunedì","Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"};
private Object [][] data = {{"8:30 - 9:30","","","","","",""},
{"9:30 - 10:30","","","","","",""},
{"10:30 - 11:30","","","","","",""},
{"11:30 - 12:30","","","","","",""},
{"12:30 - 13:30","","","","","",""},
{"13:30 - 14:30","","","","","",""},
{"14:30 - 15:30","","","","","",""},
{"15:30 - 16:30","","","","","",""},
{"16:30 - 17:30","","","","","",""}};
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public int getRowCount() {
return data.length;
}
@Override
public String getColumnName(int col) {
return columns[col];
}
@Override
public Object getValueAt(int row, int col) {
return data[row][col];
}
@Override
public void setValueAt(Object aValue, int row, int col) {
data[row][col] = aValue;
fireTableCellUpdated(row, col);
}
}
public String[] getLesson (int row, int column)
{
String value = (String) table.getValueAt(row, column);
int start = value.indexOf("<b>");
int end = value.indexOf("</b>");
String insegnamento = value.substring(start + "<b>".length(), end);
start = value.lastIndexOf("<b>");
end = value.lastIndexOf("</b>");
String aula = value.substring(start + "<b>".length(), end);
return new String[] {insegnamento,aula};
}
}
}
公共类TabellaOrario扩展了JPanel
{
专用JTable表;
公共塔贝拉奥拉里奥酒店
{
setLayout(新的BoxLayout(这是BoxLayout.Y_轴));
table=新的JTable(新的MyTableModel());
表.setFillsViewPerthweight(真);
表.setPreferredScrollableViewportSize(新维度(510350));
JScrollPane jps=新的JScrollPane(表);
增补(太平绅士);
添加(新JScrollPane(表));
table.setCellSelectionEnabled(真);
表1.设置行高(40);
}
公共JTable getTable(){
返回表;
}
公共类MyTableModel扩展了AbstractTableModel
{
私有字符串[]列={”、“Lunedì”、“Martedì”、“Mercoledì”、“Giovedì”、“venredì”、“Sabato”};
私有对象[][]数据={{“8:30-9:30”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”},
{"9:30 - 10:30","","","","","",""},
{"10:30 - 11:30","","","","","",""},
{"11:30 - 12:30","","","","","",""},
{"12:30 - 13:30","","","","","",""},
{"13:30 - 14:30","","","","","",""},
{"14:30 - 15:30","","","","","",""},
{"15:30 - 16:30","","","","","",""},
{"16:30 - 17:30","","","","","",""}};
@凌驾
public int getColumnCount(){
返回列的长度;
}
@凌驾
public int getRowCount(){
返回数据长度;
}
@凌驾
公共字符串getColumnName(int-col){
返回列[col];
}
@凌驾
公共对象getValueAt(整数行,整数列){
返回数据[行][col];
}
@凌驾
public void setValueAt(对象有效、整行、整列){
数据[行][列]=aValue;
FireTableCell更新(行、列);
}
}
公共字符串[]getLesson(int行,int列)
{
字符串值=(字符串)table.getValueAt(行、列);
int start=value.indexOf(“”);
int end=value.indexOf(“”);
String insignamento=value.substring(开始+“”.length(),结束);
开始=值。lastIndexOf(“”);
结束=值。lastIndexOf(“”);
字符串aula=value.substring(开始+“”.length(),结束);
返回新字符串[]{insignanto,aula};
}
}
}
在MyTableModel
类中,我定义了要在CreaOrario
类中使用的方法getLesson()
但是,如果在MyTableModel
中写入table.getLesson()
,则会显示一条消息错误,表明类型JTable的getLesson()方法未定义。
为什么?table
infact是一个TabellaOrario
对象,并将MyTableModel
作为模型getLesson()
是为MyTableModel
定义的,所以我希望table.getLesson()
可以工作。正如您的代码所示getLesson
是在TabellaOrario
中定义的,而不是在MyTableModel
中定义的。这可能就是问题所在
尝试保持代码的形式,您将看到该方法没有在类中实现
public class TabellaOrario extends JPanel
{
private JTable table;
MyTableModel tm;
public TabellaOrario (int semestre)
{
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
tm = new MyTableModel();
table = new JTable(tm);
// YOU CAN NOW CALL tm.getLesson() OR table.((MyTableModel)getTableModel()).getLesson();
table.setFillsViewportHeight(true);
table.setPreferredScrollableViewportSize(new Dimension(510, 350));
JScrollPane jps = new JScrollPane(table);
add(jps);
add(new JScrollPane(table));
table.setCellSelectionEnabled(true);
table.setRowHeight(40);
}
public JTable getTable() {
return table;
}
public class MyTableModel extends AbstractTableModel
{
private String[] columns = {"","Lunedì","Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"};
private Object [][] data = {{"8:30 - 9:30","","","","","",""},
{"9:30 - 10:30","","","","","",""},
{"10:30 - 11:30","","","","","",""},
{"11:30 - 12:30","","","","","",""},
{"12:30 - 13:30","","","","","",""},
{"13:30 - 14:30","","","","","",""},
{"14:30 - 15:30","","","","","",""},
{"15:30 - 16:30","","","","","",""},
{"16:30 - 17:30","","","","","",""}};
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public int getRowCount() {
return data.length;
}
@Override
public String getColumnName(int col) {
return columns[col];
}
@Override
public Object getValueAt(int row, int col) {
return data[row][col];
}
@Override
public void setValueAt(Object aValue, int row, int col) {
data[row][col] = aValue;
fireTableCellUpdated(row, col);
}
public String[] getLesson (int row, int column)
{
String value = (String) table.getValueAt(row, column);
int start = value.indexOf("<b>");
int end = value.indexOf("</b>");
String insegnamento = value.substring(start + "<b>".length(), end);
start = value.lastIndexOf("<b>");
end = value.lastIndexOf("</b>");
String aula = value.substring(start + "<b>".length(), end);
return new String[] {insegnamento,aula};
}
}
}
公共类TabellaOrario扩展了JPanel
{
专用JTable表;
MyTableModelTM;
公共塔贝拉奥拉里奥酒店
{
setLayout(新的BoxLayout(这是BoxLayout.Y_轴));
tm=新的MyTableModel();
表=新JTable(tm);
//现在可以调用tm.getLessure()或table。((MyTableModel)getTableModel()).getLessure();
表.setFillsViewPerthweight(真);
表.setPreferredScrollableViewportSize(新维度(510350));
JScrollPane jps=新的JScrollPane(表);
增补(太平绅士);
添加(新JScrollPane(表));
table.setCellSelectionEnabled(真);
表1.设置行高(40);
}
公共JTable getTable(){
返回表;
}
公共类MyTableModel扩展了AbstractTableModel
{
私有字符串[]列={”、“Lunedì”、“Martedì”、“Mercoledì”、“Giovedì”、“venredì”、“Sabato”};
私有对象[][]数据={{“8:30-9:30”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”},
{"9:30 - 10:30","","","","","",""},
{"10:30 - 11:30","","","","","",""},
{"11:30 - 12:30","","","","","",""},
{"12:30 - 13:30","","","","","",""},
{"13:30 - 14:30","","","","","",""},
{"14:30 - 15:30","","","","","",""},
{"15:30 - 16:30","","","","","",""},
{"16:30 - 17:30","","","","","",""}};
@凌驾
public int getColumnCount(){
返回列的长度;
}
@凌驾
public int getRowCount(){
返回数据长度;
}
@凌驾
公共字符串getColumnName(int-col){
返回列[col];
}
@凌驾
公共对象getValueAt(整数行,整数列){
返回数据[行][col];
}
@凌驾
public void setValueAt(对象有效、整行、整列){
数据[行][列]=aValue;
FireTableCell更新(行、列);
}
公共字符串[]getLesson(int行,int列)
{
字符串值=(字符串)table.getValueAt(行、列);
int start=value.indexOf(“”);
int end=value.indexOf(“”);
String insignamento=value.substring(开始+“”.length(),结束);
开始=值。lastIndexOf(“”);
end=value.las
String[] lessons = ((TabellaOrario.MyTableModel)table.getModel()).getLesson();