Using JButtons as Tabs - java

Could I use JButtons as tabs? Since the JTabbedPane cannot hold the same component in multiple tabs, would there be a way for a JButton to be a tab? I know it looks like tiDE(Website) uses the JButtons as a tab. How would I do that?
I could make something like this
JButton newTab = new JButton("New Tab");
newTab.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JButton tab = new JButton("Tab 1");
JToolBar.add(tab)
tab.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
makeTextAreaTab();
}
}
);
}
}
);
But, how would I make the method makeTextAreaTab()? It would have to be the same component as my other editor(JTextArea), and have the same functionality as a JTabbedPane.

You state in a comment:
I would like to be able to have buttons serve the functionality of tabs. Click on one button, it moves to one editor. Click on another button, it moves to another editor.
Consider using a CardLayout for this where your JButtons (or perhaps better, a JComboBox) tells the CardLayout-using container which "card" (which component -- here a JScrollPane/JTextArea combination) to display.

Related

Resize window when adding Swing components

I have a JFrame which consists of some Swing components. One button has an ActionListener to add an extra button to the frame (so the user can add more information).
Now I want the window (jframe) to resize whenever a new component is added. Now the components get smaller whenever a new one is added, but the frame stays the same size.
Here is the code of the actionlistener:
addAnswerButtonMA.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
answerFieldsMA.add(new JTextField());
checkBoxesMA.add(new JCheckBox());
multipleanswerPanel.add(answerFieldsMA.get(answerFieldsMA.size() - 1));
multipleanswerPanel.add(checkBoxesMA.get(checkBoxesMA.size() - 1));
multipleanswerPanel.revalidate();
validate();
}
});
Some background (not sure if needed):
I'm making a quiz program, the administrator can add questions to the quiz by using a separate gui. If he wants to add a Multiple-answer question, he can add an extra answer by clicking the addAnswerbuttonMA to make an extra field and checkbox appear. The field represents the answer and the checkbox represents whether the answer is correct or not.
Packing the frame solves it.
addAnswerButtonMA.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
answerFieldsMA.add(new JTextField());
checkBoxesMA.add(new JCheckBox());
multipleanswerPanel.add(answerFieldsMA.get(answerFieldsMA.size() - 1));
multipleanswerPanel.add(checkBoxesMA.get(checkBoxesMA.size() - 1));
multipleanswerPanel.revalidate();
validate();
pack()
}
});

ActionEvent for jButton given a jRadioButton option

So basically, I'm trying to make a simple program here with GUI that let's you make a choice given two jRadioButtons as choices of which either of the two leads to a corresponding storyline in similar fashion to visual novels. The problem however is that I'm having trouble connecting the idea of a jButton to a choice from a jRadioButton.
The concept is like this: In a frame, there's a jTextArea which displays strings of texts forming a storyline which gives two options to choose from here and there as represented by two jRadioButtons which then must be executed by a jButton.
So far, the only logic I've placed inside the ActionListener for both jRadioButtons is having to disable the other once a jRadioButton is clicked while the jButton is intentionally blank. Anyone got any similar program or module he / she would like to share, at least, the logic on this one programatically speaking?
We usually use RadioButtons to choose between one of a few options and only one button can be selected at a time. To get this functionality, you need to add your buttons to a javax.swing.ButtonGroup . Here is a quick example:
//Fields declared in your main GUI class
JRadioButton option1,option2;
JButton goButton; //executes the "Story"
//Constructor code or place in init() method that constructor calls:
{
//initialize buttons and place them in your frame.
ButtonGroup buttonGroup = new javax.swing.ButtonGroup();
buttonGroup.add(option1);
buttonGroup.add(option2);
buttonGroup1.setSelected(option1.getModel(), true);
goButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
goButtonActionPerformed(evt);
}
});
}
private void goButtonActionPerformed(java.awt.event.ActionEvent evt) {
if(option1.isSelected()) {
//place text in your text area
}
if(option2.isSelected()) {
//place different text in your text area
}
}

change JPanel after clicking on a button

I'm building simple GUI for my app. I have couple of JPanels. I want to display them depending on action that was performed by clicking on a JButton. How can I disable one JPanel and enable another one ?
Couple of details. I have a class with JFrame where I'm building starting gui. Where I have buttons and some text. Clicking on one of the buttons should change the view in this JFrame
my button definition
JButton btnStart = new JButton("Start");
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
btnStart.setBounds(10, 11, 110, 23);
contentPane.add(btnStart);
// edit
I've found the problem. buttons were in static method
Simple as:
jframe.setContentPane(your_new_panel);
jframe.invalidate();
jframe.validate();
You may want to use CardLayout.
Or you can simple remove the oldpanel and add new panel:
contentPane.remove(oldPanel);
contentPane.add(newPanel);
First remove the jPanel and add the new jPanel. Then use validate to perform relayout.
jFrame.remove(jPanelOld);
jFrame.add(jPanelNew);
jFrame.validate();

Open new JFrame when clicking/selecting an item from the combo-box (Java)

I want to create a GUI in which the combo-box allows me to open a new JFrame by pressing an item from the combo-box. Any ideas on how could I dot that?
Instead of that, how about you use an appropriate layout manager (e.g. CardLayout)? This will enable you to easily toggle views within the same container.
Add an ActionListener to the JComboBox:
JComboBox combo = new ...
combo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// This code runs when an item is selected in the combo.
JFrame frm = new ...
frm.setVisible(true);
}
});
Add an event listener to the comboBox and just handle the event to generate a new JFrame

How action a button to open a new pane in java for a GUI

I am creating a GUI in which my home page has a button labelled "Welcome to the Panel"
The point is that when you press on this button, it will navigate to a new page where I will have other functions. My only problem is that I dont know the syntax or how that when clicking a button, it will navigate to new page.
JButton btn = new JButton("Welcome to the Panel");
btn.setActionListener(new ActionListener()
{
#Override
public void actionPerformed(ActionEvent e)
{
// Here you open the other window. You can use JFrame, JOptionPane or JDialog
}
});
button.addActionListener(new ActionListner()
{
public void actionPerformed(ActionEvent ae)
{
//code to show pane
}
});
You need to register an ActionListener on your button and inside that action listener you make that panel (the page) visible.
How you do that depends on your layout, i.e. with a CardLayout you'd show the corresponding card (here's the doc). Using other layouts you might have to replace a component, e.g. if you use a BorderLayout and your content is placed in the center, replace the center component with the panel you want to show.
Note that if you're not familiar with layout managers yet, you should first have a look at those before doing dynamic changes to the ui (like navigation etc.).

Categories