хорошо, поэтому в моей программе у меня есть несколько меток (которые находятся в массиве и прочем), так или иначе, я хочу добавить свое собственное свойство во встроенный класс Label
, в любом случае, поэтому я попытался расширить его
public class LabelMod extends Label
но всякий раз, когда я пытаюсь изменить его, чтобы он создавал мой новый тип метки вместо значения по умолчанию в методе createContents()
, он, кажется, не наследовал исходные свойства метки, и я получал стопку ошибок
public void createContents()
{
shlTictactoe = new Shell();
shlTictactoe.setSize(450, 300);
shlTictactoe.setText("TicTacToe");
имеется 9 экземпляров следующего (g1x1, g1x2, g1x3, g2x1 и т. Д.)
LabelMod g1x1 = new LabelMod(shlTictactoe, SWT.NONE);
g1x1.addMouseListener(new MouseAdapter()
{
@Override
public void mouseDown(MouseEvent e)
{
changeSt(0);
}
});
g1x1.setImage(SWTResourceManager.getImage(MainForm.class,
"/res/blank.png"));
g1x1.setBounds(10, 10, 64, 64);
и затем это для помещения их в массив
createArray(g1x1, g1x2, g1x3, g2x1, g2x2, g2x3, g3x1, g3x2, g3x3);
iЯ использую SWT для создания графического интерфейса и несколько ярлыков на главной форме.Почему я не могу создать новый тип метки (с добавленными мною дополнительными свойствами)?
для этого конкретного примера написано «Конструктор LabelMod (Shell, int) не определен»
почему нетэто просто унаследовать материал от суперкласса?я попытался добавить конструктор в класс labelMod, но он также дает неопределенную ошибку.Однако ошибка исправлена в основном классе.
public LabelMod(Shell shlTictactoe, int none)
{
super(shlTictactoe,none);
// TODO Auto-generated constructor stub
}
Еще одна идея, которая у меня возникла, заключалась в том, чтобы просто назначить некоторые из ярлыков для LabelMods, но, поскольку они не относятся к одному и тому же типу, он жалуется.Это пример того, что я имею в виду:
Label g1x1 = new Label(shlTictactoe, SWT.NONE);
g1x1.setImage(SWTResourceManager.getImage(MainForm.class,
"/res/blank.png"));
g1x1.setBounds(10, 10, 64, 64);
, а затем у меня есть массив
public LabelMod[] labelArray = new LabelMod[9];
, а затем я назначаю это метке
labelArray[0] = g1x1;
очевидно, потому что они разных типов, но это возможно, но возможно ли их преобразовать или что-то еще?
примечание: все работает, если я просто использую обычную Label
вместо моей модифицированной версии, так что я знаю, что это не проблема.
РЕДАКТИРОВАТЬ:
вот класс В полном объеме, если это поможет
public class LabelMod extends Label {
public LabelMod() throws HeadlessException
{
super();
// TODO Auto-generated constructor stub
}
public LabelMod(String text, int alignment) throws HeadlessException
{
super(text, alignment);
// TODO Auto-generated constructor stub
}
public LabelMod(String text) throws HeadlessException
{
super(text);
// TODO Auto-generated constructor stub
}
public LabelMod(Shell shlTictactoe, int none)
{
super(shlTictactoe,none);
// TODO Auto-generated constructor stub
}
public boolean isActivated;
public boolean isActivated()
{
return isActivated;
}
public void setActivated(boolean isActivated)
{
this.isActivated = isActivated;
}
}
Также я обнаружил, если навести курсор мыши на оригинал (рабочий) Label(shlTictactoe, SWT.NONE);
формат
Label(Composite parent, int style)
РЕДАКТИРОВАТЬ 2: есть также ошибки с addMouseListener
он говорит
Метод addMouseListener (MouseListener) в компоненте типа не применим для аргументов (new MouseAdapter () {})
и для setImage
я снова получаю неопределенным
Метод setImage (Image) не определен для типа labelMod
РЕДАКТИРОВАТЬ 3 Одна деталь, которую я не считал важной, но могла бы иметь жизненно важное значение для этой проблемы ... Это мой импорт для класса LabelMod
- имейте в виду, что это проект SWT
import java.awt.HeadlessException;
import java.awt.Label;
import org.eclipse.swt.widgets.Shell;
РЕДАКТИРОВАТЬ 4
хорошо, поэтому я добавил в соответствующий импорт (на этот раз - убедился), так что теперь мой импорт:
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
но теперь я получаю ошибку во время выполнения, и если я перехожу в представление конструктора, все метки не отображаются должным образом, вот что я получаю в консоли:
org.eclipse.swt.SWTException: Subclassing not allowed
at org.eclipse.swt.SWT.error(SWT.java:4282)
at org.eclipse.swt.SWT.error(SWT.java:4197)
at org.eclipse.swt.SWT.error(SWT.java:4168)
at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
at org.eclipse.swt.widgets.Widget.checkSubclass(Widget.java:313)
at org.eclipse.swt.widgets.Widget.<init>(Widget.java:148)
at org.eclipse.swt.widgets.Control.<init>(Control.java:110)
at org.eclipse.swt.widgets.Label.<init>(Label.java:101)
at Main.LabelMod.<init>(LabelMod.java:16)
at Main.MainForm.createContents(MainForm.java:99)
at Main.MainForm.open(MainForm.java:39)
at Main.MainForm.main(MainForm.java:26)
и вжурнал ошибок я получаю это:
Designer [1.1.0.r37x201109091012.201110120013]: new Label(shell, SWT.NONE)
http://pastebin.com/ru1QCU0A для остальных