2014-02-14 2 views
0

Я хочу создать свои собственные пользовательские кнопки (или у них есть шаблон для создания собственных пользовательских кнопок). Какие методы мне нужно переопределить, чтобы сделать ту же кнопку размера, что и JButton, если я хочу, чтобы она выглядела так же. Потому что я думал, что если вы добавите JButton к другому классу кнопок, пользовательская кнопка, имеющая тот же размер и выглядящий как JButton. Но когда я нажимаю свою кнопку и в форме она делает ее очень маленькой и не похожа на обычную кнопку.Создать пользовательский JButton, который можно настроить?

Я хочу иметь хотя бы ту же кнопку, что и у JButton. Но я также хочу добавить в рамки, текст и цвет на передний план и фон? Каковы все методы, которые мне нужно переопределить, и у кого-нибудь есть простой пример?

Класс: (JButton) - Моя кнопка

import javax.swing.JButton; 

public class DougCustomButton extends JButton { 
    DougCustomButton() { 
     super(); 
    setBorder(BorderFactory.createLineBorder(Color.BLUE));  
    } 

    @Override 
    public void setPreferredSize(int a, int b) { 
     //What would I put in here, do I need super() 
    } 
} 

Класс: (JPanel)

import java.awt.Dimension; 
import java.awt.Graphics; 
import javax.swing.JPanel; 

public class genericPanel2 extends JPanel { 
    private static final long serialVersionUID = 1L; 
    DougCustomButton b2 = new DougCustomButton(); 

    public genericPanel2() { 
     add(b2); 
     setPreferredSize(new Dimension(50, 30)); 
    } 
} 

Класс: (JFrame)

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.Dimension; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class genericFrame2 { 
    Dimension dimension = new Dimension(450,450); 
    JFrame f = new JFrame("Not resizable"); 
    genericPanel2 genericPanel = new genericPanel2(); 

    public static boolean RIGHT_TO_LEFT = false; 

    public genericFrame2() { 
     initUI(); 
    } 

    public static void addComponentsToPane(Container pane) { 

    } 

    public final void initUI() { 
     f.add(genericPanel); 
     f.setSize(dimension); 
     f.setResizable(true); 
     f.setLocationRelativeTo(null); 
     f.setTitle("Draw Line Test"); 
     //addComponentsToPane(f.getContentPane()); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 
     genericFrame2 ex = new genericFrame2(); 
     ex.f.setVisible(true); 
    } 
} 

Screen Shot:

Моя пользовательская кнопка - это размер пикселя? Что, вероятно, вызывает это?

enter image description here

ответ

1

Вы можете установить Border на регулярной JButton, так же, как и любой другой JComponent - возможно добавить конструктор как

public DougCustomButton() { 
    super(); 
    setBorder(BorderFactory.createLineBorder(Color.BLUE)); 
    // and a font 
    Font aFont = new Font("Serif", Font.ITALIC | Font.BOLD); 
    setFont(aFont.deriveFont(18.0f)); 
} 

Подробнее о How to Use Borders и Font.deriveFont(float).

1

Информация о размерах предоставляется менеджеру компоновки с помощью методов getPreferred/Minimum/MaximumSize. Они обычно передают установленному делегату пользовательского интерфейса, который использует такие вещи, как текст, значок и свойства поля, чтобы определить размер кнопки.

Вообще говоря, если вы хотите «настроить» кнопку, вы можете использовать API Action, который предоставляет средства для предоставления автономного объекта, который может быть легко применен к различным компонентам, таким как меню, кнопки и даже используется клавиатурным комбинациям API

Посмотрите на How to use Actions для более подробной информации

+0

Что делать, если я хочу @Override метод в новом классе. Должен ли я называть его в конструкторе, или он будет по умолчанию для размера JButton и чувствовать? Может ли кто-нибудь привести пример. –

+0

Какой метод? Это зависит от того, чего вы на самом деле пытаетесь достичь? – MadProgrammer

+0

Это то, что я хотел бы сделать для первой попытки при создании кнопки. Я хочу, по крайней мере, сделать его похожим на кнопку по умолчанию на Java? Во-вторых, я хотел бы иметь возможность изменить размер на нем и что я не уверен, должен ли я переопределить метод setPreferredSize (...) в новом классе, в данном случае DougCustomButton(). В-третьих, я хотел бы иметь список методов, которые должны или могут быть переопределены для создания дочернего класса JButton? Я знаю, что paintComponent() можно переопределить и setPreferredSize, но я бы предположил, что есть методы, которые следует переопределить. –

Смежные вопросы